#include <stdio.h>
#include <openssl/bn.h>
int main(int argc,char ** argv)
{
    if(argc<3)
    {
        printf("用法：%s P g\n",argv[0]);
        return 0;
    }
        
    char *gs=argv[2];    //设置生成元字符串
    char *Ps=argv[1];    //设置安全素数字符串
    BIGNUM *g=BN_new(); //生成元g
    BIGNUM *P=BN_new(); //安全素数P
    BIGNUM *X=BN_new(); //自己的随机数X
    BIGNUM *Y=BN_new(); //要交换的数Y
    BN_CTX *ctx=BN_CTX_new();
    BN_hex2bn(&g,gs);   //设置生成元g
    BN_hex2bn(&P,Ps);   //设置素数P
    BN_rand(X,128,0,0);  //生成128位的X
    BN_mod_exp(Y,g,X,P,ctx);    //计算Y
    printf("X Y\n");
    printf("%s\n%s\n",BN_bn2hex(X),BN_bn2hex(Y));   //输出X和Y
    BN_free(X); 
    BN_free(g);
    BN_free(Y);
    BN_free(P); //释放
    BN_CTX_free(ctx);
    return 0;
}
